#pragma once

#include "Alice/Math/Vec2.h"
#include <iostream>
#include <array>

namespace Alice
{

/*
    存储四个顶点坐标的矩形
    此结构体用于计算 OBB 碰撞
*/
struct OBBRect
{
    // 矩形的四个顶点
    Vec2 left_top;
    Vec2 right_top;
    Vec2 right_bottom;
    Vec2 left_bottom;

    /*
        将一个矩形绕给定的点旋转一定角度后并返回一个新矩形
    */
    static OBBRect CalRotateRect(const OBBRect& rect, const Vec2& dot, float angle);

    /*
        获取矩形的中点
    */
    static Vec2 CalCenter(const OBBRect& rect);

    /*
        求出矩形在一个向量上的投影向量
        投影向量的 x, y 分别为左右边界
    */
    static Vec2 CalProjOnAxis(const OBBRect& rect, const Vec2& axis);

   /*
        计算两个矩形的 4 条垂直分离轴并返回
   */
    static std::array<Vec2, 4> CalRectAxes(const OBBRect& a, const OBBRect& b);
};
} // namespace Alice
